home *** CD-ROM | disk | FTP | other *** search
- #! /bin/sh
- # $Header: /home/jerry/.bin/RCS/search,v 1.5 92/08/09 23:26:35 jerry mh_contrib $
- ### search - search for mail containing some regular expression(s)
- ### Usage: search { 'regexp' -a 'regexp' ... } [+folder] [messages]
- ##
- ## search MAKES THE pick -search COMMAND LINE EASIER TO TYPE.
- ## search REPLACES "{" WITH "-lbrace" and "}" WITH "-rbrace".
- ## IF YOU USE -a AND -o, IT PASSES THEM ON TO pick.
- ## BUG: YOU NEED TO PUT SPACE AROUND { AND } SO THIS SCRIPT CAN SEE THEM.
- ## OTHER ARGUMENTS BETWEEN { AND } HAVE -search ADDED BEFORE THEM.
- ## FOR MORE INFO, TYPE man pick.
- ##
- ## IF THE REGULAR EXPRESSION DOESN'T HAVE BAD CHARACTERS, YOU DON'T
- ## NEED TO QUOTE IT. HERE'S A SIMPLE SEARCH -- FINDING MESSAGES
- ## THAT CONTAIN THE WORD fred IN UPPER OR LOWER CASE:
- ## % search { fred }
- ## 465 10/04 Joe Mertz MH questions<<Why would Fred want
- ## 1658+ 11/30 To:fred New 'mhlinks' program replaces
- ##
- ## FOR EXAMPLE, IF YOU TYPE THIS COMMAND:
- ## % search { 'fred.*ed' -a 'mary.*may' }
- ## IT WILL ACTUALLY RUN THIS FOR YOU:
- ## pick -lbrace -search 'fred.*ed' -and -search 'mary.*may' -rbrace
- ## BUT THIS COMMAND IS A SYNTAX ERROR BECAUSE THERE AREN'T ANY BRACES:
- ## % search 'fred.*ed' +foo
- ## pick: bad message list fred.*ed
- ## YOU CAN ALSO USE -o FOR "-or". OTHER SWITCHES ARE PASSED TO pick.
- ##
- ## AFTER search RUNS pick, IT RUNS scan picked.
- ##
- ## BUG: IT'S ALMOST IMPOSSIBLE TO SEARCH FOR A DOUBLEQUOTE (").
- ## USE PLAIN pick -search TO DO THAT.
-
- # NOTE TO HACKERS: TABSTOPS ARE SET AT 4 IN THIS CODE.
- #
- # USE AT YOUR OWN RISK. SEEMS TO WORK, BUT IT'S YOUR RESPONSIBILITY!
- # PLEASE TELL ME ABOUT BUGS AND FIXES: Jerry Peek, jerry@ora.com
-
- expr=/bin/expr # I WISH THIS WAS BUILT-IN...
- mh=/usr/local/mh # WHERE MH COMMANDS LIVE
- myname="`basename $0`"
-
- # REMEMBER HOW MANY LEFT BRACES WE'VE SEEN WITHOUT MATCHING RIGHTS.
- # 0 MEANS NO NESTED BRACES... 1 MEANS 1 UNMATCHED, ETC:
- nesting=0
- # THIS IS THE COMMAND LINE FOR pick THAT WE'LL eval AT END OF SCRIPT:
- pickline=
- # PARSE COMMAND LINE:
- for arg
- do
- case "$arg" in
- \{) nesting="`$expr $nesting + 1`"
- pickline="$pickline -lbrace"
- ;;
- \}) nesting="`$expr $nesting - 1`"
- pickline="$pickline -rbrace"
- ;;
- \{*|\}*)
- # WE COULD FIX THIS WITH expr:
- echo 1>&2 "$myname: Sorry; $arg needs space between text and brace."
- exit 1
- ;;
- [+@]*)
- case "$nesting" in
- 0) folder="$arg" ;;
- *) pickline="$pickline -search \"$arg\"" ;;
- esac
- ;;
- -a*) pickline="$pickline -and" ;;
- -o*) pickline="$pickline -or" ;;
- -*) pickline="$pickline $arg" ;;
- *) case "$nesting" in
- 0) pickline="$pickline $arg" ;;
- *) pickline="$pickline -search \"$arg\"" ;;
- esac
- ;;
- esac
-
- shift
- done
-
- case "$nesting" in
- 0) if eval $mh/pick $folder $pickline -sequence picked
- then
- $mh/scan picked
- exit
- else
- exit # WITH STATUS FROM pick (MUST DO WITH else NOT AFTER fi)
- fi
- ;;
- *) echo 1>&2 "$myname: unmatched brace."
- exit 1
- ;;
- esac
-